home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / parcs / parcs.lha / sample / parser-dcg.parcs < prev    next >
Text File  |  1992-06-08  |  831b  |  36 lines

  1. append([],X,X).
  2. append([A|X],Y,[A|Z]) :- append(X,Y,Z).
  3.  
  4. parse(Sentence,Ptree) :- s(Sentence,[],Ptree).
  5.  
  6. s(X,Y,s(NP,VP)) :- np(X,Z,NP),vp(Z,Y,VP).
  7.  
  8. vp(X,Y,vp(V)) :- v(X,Y,V).
  9. vp(X,Y,vp(V,NP)) :- v(X,Z,V),np(Z,Y,NP).
  10. /* vp -> vp, pp  is left recursive */
  11. vp(X,Y,vp(VP,PP)) :- append([A|X1],[B|X2],X), vp([A|X1],[],VP),pp([B|X2],Y,PP).
  12.  
  13. np([he|X],X,np(he)).
  14. np([this|X],X,np(this)).
  15. np([ken|X],X,np(ken)).
  16. np(X,Y,np(N)) :- n(X,Y,N).
  17. np(X,Y,np(D,NP)) :- d(X,Z,D),np(Z,Y,NP).
  18. np(X,Y,np(A,NP)) :- a(X,Z,A),np(Z,Y,NP).
  19. np(X,Y,np(NP,PP)) :- append([A|X1],[B|X2],X), np([A|X1],[],NP),pp([B|X2],Y,PP).
  20.  
  21. pp(X,Y,pp(P,NP)) :- p(X,Z,P),np(Z,Y,NP).
  22.  
  23. n([pen|X],X,n(pen)).
  24. n([man|X],X,n(man)).
  25.  
  26. v([is|X],X,v(is)).
  27. v([has|X],X,v(has)).
  28.  
  29. a([black|X],X,a(black)).
  30. a([this|X],X,a(this)).
  31.  
  32. p([with|X],X,p(with)).
  33.  
  34. d([a|X],X,d(a)).
  35. d([the|X],X,d(the)).
  36.